package l1j.opqlo.Server.etcitem;

import l1j.server.server.datatables.NpcTable;
import l1j.server.server.datatables.PetTable;
import l1j.server.server.model.Instance.L1ItemInstance;
import l1j.server.server.model.Instance.L1NpcInstance;
import l1j.server.server.model.Instance.L1PcInstance;
import l1j.server.server.model.Instance.L1PetInstance;
import l1j.server.server.serverpackets.S_ServerMessage;
import l1j.server.server.templates.L1Npc;
import l1j.server.server.templates.L1Pet;

public class PetCollar {

	/** 寵物項圈 */

	// if (itemId == 40314 || itemId == 40316) { // ペットのアミュレット
	public static void begin(final int[] newData, final L1PcInstance pc,
			final L1ItemInstance l1iteminstance) {

		final int itemObjid = newData[0];

		if (pc.getInventory().checkItem(41160)) { // 寵物召喚笛

			if (withdrawPet(pc, itemObjid)) {
				pc.getInventory().consumeItem(41160, 1);
			}

		} else {
			pc.sendPackets(new S_ServerMessage(79)); // \f1何も起きませんでした。
		}
	}

	private static boolean withdrawPet(L1PcInstance pc, int itemObjectId) {
		int petCount = 0;// TODO 修正寵物召換笛
		int divisor = 6;// TODO 修正寵物召換笛
		if (!pc.getMap().isTakePets()) {
			pc.sendPackets(new S_ServerMessage(563)); // \f1ここでは使えません。
			return false;
		}

		int petCost = 0;
		final Object[] petList = pc.getPetList().values().toArray();
		for (final Object pet : petList) {
			if (pet instanceof L1PetInstance) {
				if (((L1PetInstance) pet).getItemObjId() == itemObjectId) { // 既に引き出しているペット
					return false;
				}
			}
			petCost += ((L1NpcInstance) pet).getPetcost();
		}
		int charisma = pc.getCha();
		if (pc.isCrown()) { // 君主
			charisma += 6;
		} else if (pc.isElf()) { // エルフ
			charisma += 12;
		} else if (pc.isWizard()) { // WIZ
			charisma += 6;
		} else if (pc.isDarkelf()) { // DE
			charisma += 6;
		} else if (pc.isDragonKnight()) { // ドラゴンナイト
			charisma += 6;
		} else if (pc.isIllusionist()) { // イリュージョニスト
			charisma += 6;
		}
		// TODO 修正寵物召換笛
		final L1Pet l1pet = PetTable.getInstance().getTemplate(itemObjectId);
		if (l1pet != null) {
			final int npcId = l1pet.get_npcid();
			charisma -= petCost;
			if (npcId == 45313 || npcId == 45710 // タイガー、バトルタイガー
					|| npcId == 45711 || npcId == 45712) { // 紀州犬の子犬、紀州犬
				divisor = 12;
			} else {
				divisor = 6;
			}
			petCount = charisma / divisor;
			if (petCount <= 0) {
				pc.sendPackets(new S_ServerMessage(489)); // 引き取ろうとするペットが多すぎます。
				return false;
			}
			final L1Npc npcTemp = NpcTable.getInstance().getTemplate(npcId);
			final L1PetInstance pet = new L1PetInstance(npcTemp, pc, l1pet);
			pet.setPetcost(divisor);
		}
		return true;
	}
	// TODO 修正寵物召換笛
}
